Pointers
Pointers are data types.
They store memory addresses of variables.
…
0x5FA78
…
0x5FA74
654
0x5FA70
…
0x5FA66
…
0x5FA62
value
memory address
Pointers are variables which refer to the memory locations of other variables.
So how about an analogy for this. Let's take a few houses. Each house is a memory address, the value in the house is the person that lives there. Note that people will move, but the houses always stay there. It might look something like it shown in example above. Think of "647" as the person that lives at address "0x5FA70".
x could be the car that gets you to see that nice person, "647". If you put an ampersand(&) in front of x you are looking for the house address and you could care less about who's inside.
A memory address is a location within your computers memory. Its where something is. And each one of your variables has a memory address of its own. Which means that at that address in memory is the value of that variable. Say for instance you have a single integer named x and it has a value of 654. Let's pretend that x's memory address is "0x5FA70" (hexidecimal). At the location "0x5FA70" in computers memory is the number 654. At the memory address "0x5FA70" is the number 654. "..." in the other boxes means that we don't know what's at those memory locations.
The memory addresses are defined in hexidecimal because its easier to represent them that way. Also, the addresses in this depiction increase in increments of 4. That is because the size (in bytes) of an integer is usually four (unless you're working with a crummy ol' 16-bit compiler).